package com.hk.controller;

import com.hk.entity.Admin;
import com.hk.entity.PageBean;
import com.hk.entity.Result;
import com.hk.entity.Stu;
import com.hk.service.StuService;
import com.hk.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 学生表(Stu)表控制层
 * @since 2024-11-07 16:03:04
 */
@Slf4j
@RestController
@RequestMapping("/stu")

public class StuController {
    @Autowired
    private StuService stuService;

    /**
     * 新增学生
     * @param stu
     * @return
     */
    @PostMapping("/stus")
    public Result StuAdd(@RequestBody Stu stu) {
        System.out.println("-------------------------------------");
        log.info("新增学生，Stu: {}", stu);
        System.out.println("-------------------------------------");
        stuService.stus(stu);
        return Result.success();
    }

    /**
     * 查询所有学生信息
     * @return
     */
    @GetMapping("/stuList")
    public Result stuQueryAll(){
        log.info("查询所有学生信息：");
        List<Stu> QueryAllList = stuService.QueryAll();
        return Result.success(QueryAllList);
    }

    /**
     * 批量删除学生
     * @param ids
     * @return
     */
    @DeleteMapping("{ids}")
    public Result stuDelete(@PathVariable List<Integer> ids){
        log.info("批量删除学生：ids：{}",ids);
        stuService.delete(ids);
        return Result.success();
    }

    /**
     * 根据ID查询学生，查询回显
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        log.info("根据ID查询学生：id: {}",id);
        Stu stu = stuService.getById(id);
        return Result.success(stu);
    }

    /**
     * 更新学生信息
     * @param stu
     * @return
     */
    @PutMapping("/update")
    public Result update(@RequestBody Stu stu){
        if (stu.getId() == null) {
            throw new IllegalArgumentException("学生 ID 不能为空");
        }
        log.info("更新学生信息：stu: {}",stu);
        stuService.update(stu);
        return Result.success();
    }

    /**
     * 搜索学生信息 输入学号、姓名或专业，姓名支持模糊匹配
     * @param stu
     * @return
     */
    @GetMapping("/searchStu")
    public Result search(@ModelAttribute Stu stu) {
        log.info("搜索学生信息：stu: {}", stu);
        List<Stu> info = stuService.SearchStu(stu);
        return Result.success(info);
    }

    /**
     * 分页查询
     * @param page 展现第几页
     * @param pageSize 每页展现多少条数据
     * @return
     */
    @GetMapping("/page")
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize){
        log.info("分页查询，参数：{}，{}",page,pageSize);
        PageBean pageBean = stuService.page(page,pageSize);
        return Result.success(pageBean);
    }

    /**
     * 根据学生id查询信息，学生登录后
     * @param authorization
     * @return
     * @throws Exception
     */
    @GetMapping("/home")
    public Result getInfo(@RequestHeader("token") String authorization) throws Exception{
        // 从token头中提取JWT令牌
        String token = authorization;
        // 解析JWT令牌并提取管理员ID
        log.info("token: {}",token);
        if (token == null ){
            log.info("token为空");
            return Result.error("token为空");
        }
        Map<String, Object> claims = JwtUtils.parseJWT(token);
        log.info("claims: {}",claims);
        String stuId = (String) claims.get("stuId");
        if (stuId == null){
            log.info("获取学生ID失败");
            return Result.error("获取学生ID失败");
        }
        Stu stu = stuService.HomeInfo(stuId);
        System.out.printf("********************************");
        log.info("admin: {}",stu);
        System.out.printf("********************************");
        return Result.success(stu);
    }

}
